<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class ordenes_trabajo extends MY_Controller {
	/**
	 * Evita la validacion (enfocado cuando se usa ajax). Ver mas en privilegios_model
	 * @var unknown_type
	 */
	private $excepcion_privilegio = array('ordenes_trabajo/imprimir/', 'ordenes_trabajo/modificar_ajax/', 
				'ordenes_trabajo/get_folio/', 'ordenes_trabajo/update_holograma/', 'ordenes_trabajo/terminar_orden/');
	
	public function _remap($method){
		$this->carabiner->css(array(
				array('libs/jquery-ui.css', 'screen'),
				array('libs/ui.notify.css', 'screen'),
				array('libs/jquery.treeview.css', 'screen'),
				array('base.css', 'screen')
		));
		$this->carabiner->js(array(
				array('libs/jquery.min.js'),
				array('libs/jquery-ui.js'),
				array('libs/jquery.notify.min.js'),
				array('libs/jquery.treeview.js'),
				array('general/alertas.js')
		));
		
		$this->load->model("empleados_model");
		if($this->empleados_model->checkSession()){
			$this->empleados_model->excepcion_privilegio = $this->excepcion_privilegio;
			$this->info_empleado = $this->empleados_model->getInfoEmpleado($_SESSION['id_empleado'], true);
			if($this->empleados_model->tienePrivilegioDe('', get_class($this).'/'.$method.'/')){
				$this->{$method}();
			}else
				redirect(base_url('panel/home?msg=1'));
		}else
			redirect(base_url('panel/home'));
	}
	
	/**
	 * Default. Mustra el listado de cotizaciones para administrarlas
	 */
	public function index(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('libs/jquery.superbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.superbox.js'),
			array('ordenes_trabajo/listado.js'),
			array('general/msgbox.js')
		));
		$this->load->library('pagination');
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Ventas'; //activa la opcion del menu
		$params['seo'] = array(
			'titulo' => 'Administrar orden de trabajo'
		);
		
		$this->load->model('ordenes_trabajo_model');
		$params['cotiza'] = $this->ordenes_trabajo_model->getOrdenesTrabajo();
		
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/ordenes_trabajo/listado', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * Agrega una orden trabajo a la bd
	 */
	public function agregar(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.numeric.js'),
			array('general/msgbox.js'),
			array('general/util.js'),
			array('ordenes_trabajo/frm_addmod.js')
		));
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Ventas'; //activa la opcion del menu
		$params['seo'] = array(
			'titulo' => 'Agregar orden de trabajo'
		);
		$params['pagar_ordent'] = false;
		
		if(isset($_GET['cotiz']{0}))
			$this->asignaCotizacion($_GET['cotiz']);
		elseif(isset($_GET['ordt']{0})) //Asigna los datos de una venta de hace un año
			$this->asignaOrdent($_GET['ordt']);
		
		$this->configAddModCotizacion();
		$this->load->model('ordenes_trabajo_model');
		
		if($this->form_validation->run() == FALSE){
			$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()));
		}else{
			$respons = $this->ordenes_trabajo_model->addOrdenTrabajo();
			
			if($respons[0]){
				$params['id_ordentt'] = $respons[2];
				if($respons[1] == 'pa'){
					$params['pagar_ordent'] = true;
				}/*else
					redirect(base_url('panel/ordenes_trabajo/agregar/?'.String::getVarsLink(array('msg')).'&msg=4'));*/
			}
		}
		
		$params['fecha'] = date("Y-m-d");
		if($this->input->post('did_vendedor') != '')
			$params['folio'] = explode(';', $this->ordenes_trabajo_model->getFolioOrdent($this->input->post('did_vendedor')));
		$params['plazo_credito'] = 7;
		
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/ordenes_trabajo/agregar', $params);
		$this->load->view('panel/footer');
	}
	
	private function asignaCotizacion($id_cotiza){
		if($this->input->get('prosp') == 'si'){
			$this->load->model('prospectos_model');
			$data = $this->prospectos_model->getInfoCotizacion($id_cotiza);
		}else{
			$this->load->model('cotizaciones_model');
			$data = $this->cotizaciones_model->getInfoCotizacion($id_cotiza);
		}
		
		$campos = array('cliente' => 'dcliente', 'id_cliente' => 'did_cliente', 
				'nombre_vendedor' => 'dvendedor', 'id_vendedor' => 'did_vendedor',
				'cliente_dias_credito' => 'dplazo_credito', 'subtotal' => 'dtsubtotal',
				'importe_iva' => 'dtiva', 'total' => 'dttotal');
		
		foreach($campos as $key => $itm){
			$_POST[$itm] = $data['info']->{$key};
		}
		
		$this->load->model('clientes_model');
		$cliente = $this->clientes_model->getInfoCliente($data['info']->id_cliente, true);
		$_POST['dcliente_rfc'] = $cliente['info']->rfc;
		
		$info = ''; $info2 = '';
		$info .= $cliente['info']->calle!=''? $cliente['info']->calle: '';
		$info .= $cliente['info']->no_exterior!=''? ' #'.$cliente['info']->no_exterior: '';
		$info .= $cliente['info']->no_interior!=''? '-'.$cliente['info']->no_interior: '';
		$info .= $cliente['info']->colonia!=''? ', '.$cliente['info']->colonia: '';
		$info .= ($cliente['info']->localidad!=''? ', '.$cliente['info']->localidad: '');
		
		$info2 .= $cliente['info']->municipio!=''? $cliente['info']->municipio: '';
		$info2 .= $cliente['info']->estado!=''? ', '.$cliente['info']->estado: '';
		$info2 .= $cliente['info']->cp!=''? ', CP: '.$cliente['info']->cp: '';
		$_POST['dcliente_domici'] = $info;
		$_POST['dcliente_ciudad'] = $info2;
		
		$_POST['dfecha'] = date("Y-m-d");
		
		//Productos de la cotizacion
		$campos = array('id_producto' => 'dpid_producto', 'cantidad' => 'dpcantidad',
				'precio_unitario' => 'dpprecio_unitario', 'importe' => 'dpimporte',
				'taza_iva' => 'dptaza_iva', 'importe_iva' => 'dpimporte_iva',
				'codigo' => 'dpcodigo', 'nombre' => 'dpnombre');
		foreach($data['productos'] as $kkey => $p){
			foreach($campos as $key => $itm){
				$_POST[$itm][$kkey] = $p->{$key};
			}
		}
	}
	
	private function asignaOrdent($id_ordent){
		$this->load->model('ordenes_trabajo_model');
		$data = $this->ordenes_trabajo_model->getInfoOrdenTrabajo($id_ordent, false, true);
		
		$campos = array('cliente->nombre_fiscal' => 'dcliente', 'id_cliente' => 'did_cliente', 
				'nombre_vendedor' => 'dvendedor', 'id_vendedor' => 'did_vendedor',
				'cliente->dias_credito' => 'dplazo_credito', 'subtotal' => 'dtsubtotal',
				'importe_iva' => 'dtiva', 'total' => 'dttotal');
		
		foreach($campos as $key => $itm){
			$dd = explode("->", $key);
			if(count($dd) == 1)
				$_POST[$itm] = $data['info']->{$key};
			else
				$_POST[$itm] = $data['info']->{$dd[0]}->{$dd[1]};
		}
		
		$cliente = $data['info']->cliente;
		$_POST['dcliente_rfc'] = $cliente->rfc;
		
		$info = ''; $info2 = '';
		$info .= $cliente->calle!=''? $cliente->calle: '';
		$info .= $cliente->no_exterior!=''? ' #'.$cliente->no_exterior: '';
		$info .= $cliente->no_interior!=''? '-'.$cliente->no_interior: '';
		$info .= $cliente->colonia!=''? ', '.$cliente->colonia: '';
		$info .= ($cliente->localidad!=''? ', '.$cliente->localidad: '');
		
		$info2 .= $cliente->municipio!=''? $cliente->municipio: '';
		$info2 .= $cliente->estado!=''? ', '.$cliente->estado: '';
		$info2 .= $cliente->cp!=''? ', CP: '.$cliente->cp: '';
		$_POST['dcliente_domici'] = $info;
		$_POST['dcliente_ciudad'] = $info2;
		
		$_POST['dfecha'] = date("Y-m-d");
		
		//Productos de la ordent
		$campos = array('id_producto' => 'dpid_producto', 'cantidad' => 'dpcantidad',
				'precio_unitario' => 'dpprecio_unitario', 'importe' => 'dpimporte',
				'taza_iva' => 'dptaza_iva', 'importe_iva' => 'dpimporte_iva',
				'codigo' => 'dpcodigo', 'nombre' => 'dpnombre');
		foreach($data['productos'] as $kkey => $p){
			foreach($campos as $key => $itm){
				$_POST[$itm][$kkey] = $p->{$key};
			}
		}
	}
	
	/**
	 * Obtiene el folio de la orden dependiendo el empleado, usando ajax 
	 */
	public function get_folio(){
		if(isset($_GET['id_empleado']{0})){
			$this->load->model('ordenes_trabajo_model');
			$res = $this->ordenes_trabajo_model->getFolioOrdent($_GET['id_empleado']);
			$param = explode(';', $res);
			echo json_encode($param);
		}
	}
	
	/**
	 * muesta la info de una orden de trabajo sin dejar editar la info
	 */
	public function ver(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.numeric.js'),
			array('general/msgbox.js'),
			array('general/util.js'),
			array('ordenes_trabajo/frm_addmod.js')
		));
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Ventas'; //activa la opcion del menu
		$params['seo'] = array(
			'titulo' => 'Ver orden de trabajo'
		);
		
		if(isset($_GET['id']{0})){
			/*$this->configAddModCotizacion();
			
			if($this->form_validation->run() == FALSE){
				$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()));
			}else{
				$respons = $this->empleados_model->updatePrivilegio();
				
				if($respons[0])
					redirect(base_url('panel/privilegios/modificar/?'.String::getVarsLink(array('msg')).'&msg=3'));
			}*/
			$this->load->model('ordenes_trabajo_model');
			$params['inf'] = $this->ordenes_trabajo_model->getInfoOrdenTrabajo($_GET['id']);
			if(!is_array($params['inf']))
				unset($params['inf']);
			
			if(isset($_GET['msg']{0}))
				$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		}else
			$params['frm_errors'] = $this->showMsgs(1);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/ordenes_trabajo/ver', $params);
		$this->load->view('panel/footer');
	}

	/**
	 * Modifica una orden
	 */
	public function modificar_ajax(){
		$this->configModOrdent();
		$this->load->model('ordenes_trabajo_model');
		
		if($this->form_validation->run() == FALSE){
			$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()));
		}else{
			$respons = $this->ordenes_trabajo_model->editOrdenTrabajo();
			$params['frm_errors'] = $this->showMsgs(3);
		}

		echo json_encode($params);
	}
	
	/**
	 * Elimina una cotizacion de la bd (le cambia el status a e:eliminada)
	 */
	public function eliminar(){
		if(isset($_GET['id']{0})){
			$this->load->model('ordenes_trabajo_model');
			$respons = $this->ordenes_trabajo_model->cancelaOrdenTrabajo();
			
			if($respons[0])
				redirect(base_url('panel/ordenes_trabajo/?msg=5'));
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	
	/**
	 * Imprime la orden de trabajo
	 */
	public function imprimir(){
		/*$result = $this->db->query("SELECT id_ordent
		                           FROM ordenest ORDER BY id_ordent LIMIT 100 offset ".$_GET['offset']);
		foreach ($result->result() as $key => $value) {
			$_GET['id'] = $value->id_ordent;*/
		if(isset($_GET['id']{0})){
			//Orden trabajo
			$res = $this->db
				->select('id_ordent, id_cliente, id_vendedor, UPPER(serie) AS serie, folio, Date(fecha) AS fecha, subtotal, importe_iva, total, 
						condicion_pago, UPPER(domicilio) AS domicilio, UPPER(ciudad) AS ciudad, status')
				->from('ordenest')
				->where("id_ordent = '".$_GET['id']."'")
			->get();
			$data_cotiza = $res->row();
			$res->free_result();
			
			//productos
			$res = $this->db
				->select('p.id_producto, p.codigo, p.nombre, pu.abreviatura as unidad, cp.taza_iva, cp.cantidad, cp.precio_unitario,
					cp.importe, cp.importe_iva, cp.total')
				->from('ordenest_productos AS cp')
					->join('productos AS p', 'p.id_producto = cp.id_producto', 'inner')
					->join('productos_unidades AS pu', 'p.id_unidad = pu.id_unidad', 'inner')
				->where("cp.id_ordent = '".$_GET['id']."'")
				->get();
			$data_productos = $res->result();
			$res->free_result();
			
			//cliente
			$res = $this->db
				->select("cs.id_sucursal, UPPER(cs.nombre_fiscal) AS nombre_fiscal, UPPER(cs.rfc) AS rfc,
						(CASE cs.telefono WHEN '' THEN csc.telefono ELSE cs.telefono END) AS telefono, 
						csc.nombre, csc.puesto")
				->from('clientes_sucursales AS cs')
					->join('clientes_sucursales_contacto as csc', 'cs.id_sucursal = csc.id_sucursal', 'LEFT')
				->where("cs.id_sucursal = '".$data_cotiza->id_cliente."'")
				->order_by('csc.id_contacto', 'ASC')
				->limit(1)
			->get();
			$data_cliente = $res->row();
			$res->free_result();
			
			
			$this->load->library('mypdf');
			// Creación del objeto de la clase heredada
			$pdf = new MYpdf('P', 'mm', 'Letter');
			$pdf->show_head = false;
			$pdf->AddPage();
			
			$pdf->Image(APPPATH.'images/ordent.jpg', .5, 0, 215, 279);
			
			$y = 40;
			$pdf->SetXY(171, 15);
			$pdf->SetFont('Arial','B', 12);
			$pdf->SetTextColor(204, 0, 0);
			$pdf->Cell(35, 8, $data_cotiza->folio, 0, 0, 'C');
			
			
			$pdf->SetXY(158, 40);
			$pdf->SetFont('Arial','', 8);
			$pdf->SetTextColor(0, 0, 0);
			$pdf->Cell(48, 6, $data_cotiza->fecha, 0, 0, 'C');
			$pdf->SetXY(182, 50);
			$pdf->Cell(25, 6, $data_cotiza->serie, 0, 0, 'C');
			$pdf->SetXY(158, 58);
			$pdf->Cell(48, 6, ($data_cotiza->condicion_pago=='cr'? 'CREDITO': 'CONTADO'), 0, 0, 'C');
			
			$pdf->SetXY(27, 38);
			$pdf->Cell(129, 6, $data_cliente->nombre_fiscal, 0, 0, 'L');
			$pdf->SetFont('Arial','', 7);
			$pdf->SetXY(27, 45);
			$pdf->Cell(129, 6, $data_cotiza->domicilio, 0, 0, 'L');
			$pdf->SetXY(27, 52);
			$pdf->Cell(129, 6, $data_cotiza->ciudad, 0, 1, 'L');
			$pdf->SetXY(27, 59);
			$pdf->Cell(129, 6, $data_cliente->rfc, 0, 1, 'L');
			
			$pdf->SetY(70);
			$aligns = array('C', 'C', 'C', 'C', 'C');
			$widths = array(14, 9, 122, 24, 27);
			$header = array('Cantidad', 'Descripción', 'Precio', 'Importe');
			foreach($data_productos as $key => $item){
				$band_head = false;
				if($pdf->GetY() >= 200 || $key==0){ //salta de pagina si exede el max
					if($key > 0)
						$pdf->AddPage();
				}
					
				$pdf->SetFont('Arial','',8);
				$pdf->SetTextColor(0,0,0);
					
				$datos = array($item->cantidad, $item->unidad,
						$item->nombre, 
						String::formatoNumero($item->precio_unitario),
						String::formatoNumero($item->importe));
			
				$pdf->SetX(11);
				$pdf->SetAligns($aligns);
				$pdf->SetWidths($widths);
				$pdf->Row($datos, false, false);
			}
			
			$pdf->SetFont('Arial','', 9);
			$pdf->SetXY(180, 182);
			$pdf->Cell(27, 6, string::formatoNumero($data_cotiza->subtotal), 0, 0, 'L');
			$pdf->SetXY(180, 188);
			$pdf->Cell(27, 6, string::formatoNumero($data_cotiza->importe_iva), 0, 0, 'L');
			$pdf->SetXY(180, 194);
			$pdf->Cell(27, 6, string::formatoNumero($data_cotiza->total), 0, 0, 'L');
			$pdf->SetXY(13, 187);
			$pdf->SetAligns(array('L'));
			$pdf->SetWidths(array(142));
			$pdf->Row(array(strtoupper(string::num2letras($data_cotiza->total))), false, false);
			
			$pdf->SetXY(170, 219);
			$pdf->SetFont('Arial','B', 12);
			$pdf->SetTextColor(204, 0, 0);
			$pdf->Cell(35, 8, $data_cotiza->folio, 0, 0, 'C');
			
			/*$pdf->Output('ordenest/'.$data_cliente->nombre_fiscal.'-'.$data_cliente->rfc.'-'.
				$data_cotiza->folio.'-'.$data_cotiza->status.'.pdf', 'F');*/
			$pdf->Output('listas_de_precio.pdf', 'I');
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	
	
	
	/***** ABONOS A COMPRAS ******/
	/**
	 * Paga totalmente una compra o agrega abonos, y Agrega una operacion en bancos,
	 * se puede usar en superbox
	 */
	public function pagar(){
		$this->carabiner->css(array(
			array('general/forms.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.numeric.js'),
			array('banco/estados_cuenta.js')
		));
	
		$params['seo'] = array(
			'titulo' => 'Pagar orden de trabajo'
		);
	
		//Config de pagar o abonar
		$msg_titulo = 'Pagar Orden de trabajo!';
		$view = 'pagar_ordent';
		$msg_ok = 'La Orden de trabajo se pago correctamente.';
		if(isset($_GET['tipo']{0})){
			$params['seo']['titulo'] = 'Agregar abono';
			$msg_titulo = 'Agregar Abono!';
			$view = 'abonar_ordent';
			$msg_ok = 'El abono se agrego correctamente.';
		}
	
		if(isset($_GET['id']{0})){
			$this->load->model('ordenes_trabajo_model');
			$this->load->library('form_validation');
			$rules = array(
				array('field'	=> 'dfecha',
						'label'	=> 'Fecha',
						'rules'	=> 'required|max_length[10]|callback_isValidDate'),
				array('field'	=> 'dconcepto',
						'label'	=> 'Concepto',
						'rules'	=> 'required|max_length[120]'),
				array('field'	=> 'dmonto',
						'label'	=> 'Monto',
						'rules'	=> 'required|numeric'),
				array('field'	=> 'dcuenta',
						'label'	=> 'Cuenta',
						'rules'	=> 'required|max_length[25]'),
				array('field'	=> 'dtipo',
						'label'	=> 'Tipo',
						'rules'	=> 'required|max_length[2]'),
				array('field'	=> 'dactor',
						'label'	=> 'Proveedor',
						'rules'	=> 'required'),
				array('field'	=> 'did_actor',
						'label'	=> 'Proveedor',
						'rules'	=> 'required|max_length[25]'),
				array('field'	=> 'dforma_pago',
						'label'	=> 'Forma de pago',
						'rules'	=> ''));
			$this->form_validation->set_rules($rules);
			if($this->form_validation->run() == FALSE){
				$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()), $msg_titulo);
			}else{
				$respons = $this->ordenes_trabajo_model->addAbono();

				if($respons[0]){
					$params['load_operaciones'] = true;
					$params['frm_errors'] = $this->showMsgs(6, $msg_ok, $msg_titulo);
				}
			}
				
			//Cuentas bancarias
			$this->load->model('banco_model');
			$params['cuentas'] = $this->banco_model->obtenCuentas(100);
				
			//Info orden trabajo
			$params['ordent'] = $this->ordenes_trabajo_model->getInfoOrdenTrabajo($_GET['id'], true);
			$this->load->model('clientes_model');
			$params['prov'] = $this->clientes_model->getInfoCliente($params['ordent']['info']->id_cliente, true);

			if(isset($_GET['msg']{0}))
				$params['frm_errors'] = $this->showMsgs($_GET['msg'], '', $msg_titulo);
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	
		$this->load->view('panel/ordenes_trabajo/'.$view, $params);
	}
	
	/**
	 * Elimina abonos de cobranza
	 */
	public function delete_abono(){
		if(isset($_GET['id']{0}) && isset($_GET['id_opc']{0})){
			$this->load->model('ordenes_trabajo_model');
			$respons = $this->ordenes_trabajo_model->deleteAbono($_GET['id'], $_GET['id_opc']);

			if($respons[0])
				redirect(base_url('panel/cobranza/detalle/?'.String::getVarsLink(array('id', 'msg')).'&msg=3'));
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	
	
	
	/** ****************************************
	 * 			CONTROL DE TALLER
	 * *****************************************
	 * obtiene las ordenes de trabajo que entraran al taller para su procesamiento
	 */
	public function control_taller(){
		$this->carabiner->css(array(
				array('libs/jquery.msgbox.css', 'screen'),
				array('general/forms.css', 'screen'),
				array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
				array('libs/jquery.msgbox.min.js'),
				array('libs/jquery.numeric.js'),
				array('ordenes_trabajo/control_taller.js'),
				array('general/msgbox.js')
		));
		$this->load->library('pagination');
		
		$params['info_empleado'] 	= $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] 	= 'Ventas'; //activa la opcion del menu
		$params['seo'] 				= array('titulo' => 'Control del Taller');
		
		$params['fecha1'] = $this->input->get('ffecha1') != ''? $this->input->get('ffecha1'): '';
		$params['fecha2'] = $this->input->get('ffecha2') != ''? $this->input->get('ffecha2'): '';
		
		$this->load->model('ordenes_trabajo_model');
		$params['cotiza'] = $this->ordenes_trabajo_model->getControlTaller();
		
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);
	
		$this->load->view('panel/header', $params);
		$this->load->view('panel/ordenes_trabajo/control_taller', $params);
		$this->load->view('panel/footer');
	}
	
	public function update_holograma(){
		if(isset($_POST['id_orden']{0})){
			$this->load->model('ordenes_trabajo_model');
			$resp = $this->ordenes_trabajo_model->updateHologramas();
			$params['msg'] = $this->showMsgs(6, 'El holograma se modifico correctamente.', 'Control del Taller!!');
		}else
			$params['msg'] = $this->showMsgs(1, '', 'Control del Taller!!');
	
		echo json_encode($params);
	}
	
	public function terminar_orden(){
		if(isset($_POST['id_orden']{0}) && isset($_POST['terminada']{0})){
			$this->load->model('ordenes_trabajo_model');
			$resp = $this->ordenes_trabajo_model->terminarOrden();
			$params['msg'] = $this->showMsgs(6, 'Se Marcar como terminada la Orden.', 'Control del Taller!!');
		}else
			$params['msg'] = $this->showMsgs(1, '', 'Control del Taller!!');

		echo json_encode($params);
	}
	
	
	
	
	/**
	 * Configura los metodos de agregar y modificar
	 */
	private function configAddModCotizacion(){
		$this->load->library('form_validation');
		$rules = array(
			array('field'	=> 'did_cliente',
					'label'		=> 'Cliente',
					'rules'		=> 'required|max_length[25]'),
			array('field'	=> 'did_vendedor',
					'label'		=> 'Vendedor',
					'rules'		=> 'required|max_length[25]'),
			array('field'	=> 'dfolio',
					'label'		=> 'Folio',
					'rules'		=> 'required|numeric|callback_seriefolio_check'),
			array('field'	=> 'dsin_rango',
					'label'		=> 'Folio',
					'rules'		=> 'required|max_length[1]'),
			array('field'	=> 'dfecha',
					'label'		=> 'Fecha',
					'rules'		=> 'required|max_length[10]|callback_isValidDate'),
			array('field'	=> 'dtsubtotal',
					'label'		=> 'SubTotal',
					'rules'		=> 'required|numeric'),
			array('field'	=> 'dtiva',
					'label'		=> 'IVA',
					'rules'		=> 'required|numeric'),
			array('field'	=> 'dttotal',
					'label'		=> 'Total',
					'rules'		=> 'required|numeric|callback_val_total'),
			array('field'	=> 'dobservaciones',
					'label'		=> 'Observaciones',
					'rules'		=> 'max_length[210]'),
			array('field'	=> 'dcondicion_pago',
					'label'		=> 'Condición de pago',
					'rules'		=> 'max_length[2]'),
			array('field'	=> 'dplazo_credito',
					'label'		=> 'Plazo de crédito',
					'rules'		=> 'numeric'),
			array('field'	=> 'dpid_producto[]',
					'label'		=> 'Productos',
					'rules'		=> 'required|callback_val_existencia'),
			array('field'	=> 'dtipo',
					'label'		=> 'Tipo',
					'rules'		=> 'required'),
			
			array('field'	=> 'dcliente',
					'label'		=> 'Cliente',
					'rules'		=> ''),
			array('field'	=> 'dcliente_rfc',
					'label'		=> 'Cliente',
					'rules'		=> ''),
			array('field'	=> 'dcliente_domici',
					'label'		=> 'Cliente',
					'rules'		=> ''),
			array('field'	=> 'dcliente_ciudad',
					'label'		=> 'Cliente',
					'rules'		=> ''),
			array('field'	=> 'dvendedor',
					'label'		=> 'Vendedor',
					'rules'		=> ''),
			array('field'	=> 'dttotal_letra',
					'label'		=> 'letra',
					'rules'		=> '')
		);
		$this->form_validation->set_rules($rules);
	}
	private function configModOrdent(){
		$this->load->library('form_validation');
		$rules = array(
			array('field'	=> 'did_orden',
					'label'		=> 'Id de la orden es requerido',
					'rules'		=> 'required|max_length[25]'),
			array('field'	=> 'did_vendedor',
					'label'		=> 'Vendedor',
					'rules'		=> 'required|max_length[25]'),
			array('field'	=> 'dfolio',
					'label'		=> 'Folio',
					'rules'		=> 'required|numeric|callback_seriefolio_check'),
			array('field'	=> 'dsin_rango',
					'label'		=> 'Folio',
					'rules'		=> 'required|max_length[1]'),
			
			array('field'	=> 'dtipo',
					'label'		=> 'Tipo',
					'rules'		=> 'required')
		);
		$this->form_validation->set_rules($rules);
	}
	/**
	 * Form_validation: Valida si el usuario ya esta usado por alguien mas
	 * @param unknown_type $str
	 */
	public function seriefolio_check($str){
		if($str != ''){
			$sql = $ms = '';
			if($this->input->post('dsin_rango') == 't'){
				$sql = " AND sin_rango = 't'";
				$ms = 'El folio ya esta utilizado por otra orden de trabajo.';
			}else{
				$sql = " AND id_vendedor = '".$this->input->post('did_vendedor')."'";
				$ms = 'El folio ya esta utilizado, actualiza el rango para el vendedor.';
			}

			if ($this->input->post('did_orden') != '') {
				$sql1 = "folio = ".$str." AND id_ordent <> '".$this->input->post('did_orden')."'";
			}else
				$sql1 = "folio = ".$str."";
				
			$res = $this->db->select('Count(id_ordent) AS num')
				->from('ordenest')
				->where("status <> 'ca' AND ".$sql1.$sql)
			->get();
			$data = $res->row();
			if($data->num > 0){
				$this->form_validation->set_message('seriefolio_check', $ms);
				return false;
			}
		}
		return true;
	}
	/**
	 * Form_validation: Valida su una fecha esta en formato correcto
	 */
	public function isValidDate($str){
		if($str != ''){
			if(String::isValidDate($str) == false){
				$this->form_validation->set_message('isValidDate', 'El campo %s no es una fecha valida');
				return false;
			}
		}
		return true;
	}
	
	public function val_total($str){
		if($str <= 0){
			$this->form_validation->set_message('val_total', 'El Total no puede ser 0, verifica los datos ingresados.');
			return false;
		}
		return true;
	}
	
	/**
	 * valida la existencia de productos, que haya suficientes para vender
	 * @param unknown_type $str
	 * @return boolean
	 */
	public function val_existencia($str){
		$this->load->model('ordenes_trabajo_model');
	
		$res = array();
		foreach($_POST['dpid_producto'] as $keyp => $p){
			$respons = $this->ordenes_trabajo_model->productosInventario($p, $_POST['dpcantidad'][$keyp]);
			foreach($respons as $itm){
				if(isset($res[str_replace('.', '_', $itm['id_producto'])]))
					$res[str_replace('.', '_', $itm['id_producto'])] += $itm['cantidad'];
				else
					$res[str_replace('.', '_', $itm['id_producto'])] = $itm['cantidad'];
			}
		}
	
		$respons = array();
		$msg = '';
		foreach($res as $key => $itm){
			$rs_exis = $this->db->query("
				SELECT productos.nombre, get_existencia_producto('".str_replace('_', '.', $key)."') AS exis, abreviatura
				FROM productos 
						INNER JOIN productos_unidades ON productos_unidades.id_unidad = productos.id_unidad 
				WHERE id_producto = '".str_replace('_', '.', $key)."'");
			$data_exis = $rs_exis->row();
				
			if($itm > $data_exis->exis){
				$respons[] = array('id_producto' => str_replace('_', '.', $key), 'nombre' => $data_exis->nombre, 'faltan' => abs($itm-$data_exis->exis));
				$msg .= $data_exis->nombre.', faltan '.abs($itm - $data_exis->exis).' '.$data_exis->abreviatura.'<br>';
			}
		}
		
		if(count($respons) > 0){
			$this->form_validation->set_message('val_existencia', 'No hay suficiente existencia:<br>'.$msg);
			return false;
		}else
			return true;
	}
	
	
	/**
	 * Muestra mensajes cuando se realiza alguna accion
	 * @param unknown_type $tipo
	 * @param unknown_type $msg
	 * @param unknown_type $title
	 */
	private function showMsgs($tipo, $msg='', $title='Ordenes de trabajo!'){
		switch($tipo){
			case 1:
				$txt = 'El campo ID es requerido.';
				$icono = 'error';
			break;
			case 2: //Cuendo se valida con form_validation
				$txt = $msg;
				$icono = 'error';
			break;
			case 3:
				$txt = 'La orden de trabajo se modifico correctamente.';
				$icono = 'ok';
			break;
			case 4:
				$txt = 'La orden de trabajo se agrego correctamente.';
				$icono = 'ok';
			break;
			case 5:
				$txt = 'La orden de trabajo se cancelo correctamente.';
				$icono = 'ok';
			break;
			case 6:
				$txt = $msg;
				$icono = 'ok';
			break;
		}
		
		return array(
			'title' => $title,
			'msg' => $txt,
			'ico' => $icono);
	}
}

?>